mod vec;

use std::collections::{HashMap, HashSet, VecDeque};

#[allow(dead_code)]
fn main() {
    // vec();
    // hashmap();
    // hashmap02();
    // hashset();
    vec_deque();
}

#[allow(dead_code)]
fn hashset() {
    let mut study_set = HashSet::new();
    // 返回 x 为 true，表示插入成功，返回 x 为 false ，表示插入失败
    let x = study_set.insert("Go语言极简一本通");
    println!("{}", x);
    let x = study_set.insert("Go语言微服务核心架构22讲");
    println!("{}", x);
    let x = study_set.insert("从0到Go语言微服务架构师");
    println!("{}", x);
    println!("{:?}", study_set);
    // 输出 {"从0到Go语言微服务架构师", "Go语言微服务核心架构22讲", "Go语言极简一本通"}

    // x: false，因为 hashset 已存在当前值，插入失败
    let x = study_set.insert("从0到Go语言微服务架构师");
    println!("{}", x);
    println!("{:?}", study_set);

    match study_set.get("从0到Go语言微服务架构师") {
        None => {
            println!("没找到");
        }
        Some(data) => {
            println!("studySet中找到:{}", data);
        }
    }
}
#[allow(dead_code)]
fn hashmap() {
    let mut hm = HashMap::new();
    hm.insert("k01", "Go语言极简一本通");
    hm.insert("k02", "Go语言微服务核心架构22讲");
    hm.insert("k03", "从0到Go语言微服务架构师");
    println!("{:?}", hm);
    for (k, v) in hm.iter() {
        println!("k:{}, v:{}", k, v)
    }
    if hm.contains_key(&"k01") {
        println!("has key : k01")
    }

    // get() 方法用于根据键从哈希表中获取相应的值。
    match hm.get(&"从0到Go语言微服务架构师") {
        Some(v) => {
            println!("HashMap v:{}", v);
        }
        None => {
            println!("找不到");
        }
    }
//输出 HashMap v:3
}
#[allow(dead_code)]
fn hashmap02 (){
    let mut map:HashMap<&str,i32> = HashMap::new();
    map.insert("zhangsan",97);
    map.insert("lisi",55);
    map.insert("wangwu",77);
    println!("{:?}",map);
    for (_,score) in map.iter_mut() {
       *score += 2;
    };
    println!("{:?}",map);
}
#[allow(dead_code)]
fn vec() {
    // let mut v = Vec::new();//调用 Vec 结构的 new() 静态方法来创建向量。
    // v.push("Go语言极简一本通");       //通过push方法添加元素数据。并且追加到向量尾部。
    // v.push("Go语言微服务核心架构22讲");
    // v.push("从0到Go语言微服务架构师");
    // println!("{:?}",v);
    // println!("len :{}",v.len()); // 通过len方法获取向量中的元素个数。

    let mut v = vec!["Rust入门指南", "Rust权威指南", "Rust项目实战"];
    let x = v.remove(0);
    println!("{}", x);
    println!("{:?}", v);
}

fn vec_deque(){
    let mut v = VecDeque::new();
    // push_back，从队列底部添加
    // push_front，从队列顶部添加
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_front(2);
    v.push_front(1);  // 从前面添加
    println!("{:?}",v)
}
